package com.gdust.hzx.product.controller;

import com.gdust.hzx.model.dto.h5.ProductSkuDto;
import com.gdust.hzx.model.entity.product.ProductSku;
import com.gdust.hzx.model.vo.common.Result;
import com.gdust.hzx.model.vo.common.ResultCodeEnum;
import com.gdust.hzx.model.vo.h5.ProductItemVo;
import com.gdust.hzx.product.service.ProductService;
import com.github.pagehelper.PageInfo;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * ClassName: ProductController
 * Package: com.gdust.hzx.product.controller
 * Description:
 *
 * @Author syun
 * @Create 2024/12/26 15:45
 * @Version 1.0
 */
@Tag(name = "产品管理接口")
@RestController// @RestController: 专用于restful风格的注解 = @Controller (控制器) + @ResponseBody (方法返回值为json)
@RequestMapping(value = "api/product")
public class ProductController {
    //注入产品表的service
    @Autowired
    private ProductService productService;

    /**
     * 分页查询产品列表
     * @param page 当前页
     * @param limit 每页记录数
     * @param productSkuDto 商品列表搜索条件
     * @return
     */
    @Operation(summary = "分页查询")
    @GetMapping(value = "/{page}/{limit}")
    public Result list(@PathVariable Integer page,
                       @PathVariable Integer limit,
                       ProductSkuDto productSkuDto) {
        //分页查询产品列表
        PageInfo<ProductSku> pageInfo = productService.findByPage(page, limit, productSkuDto);
        return Result.build(pageInfo, ResultCodeEnum.SUCCESS);
    }

    /**
     * 商品详情接口
     * 需求说明：当点击某一个商品的时候，此时就需要在商品详情页面展示出商品的详情数据,详细数据如下：
     * 1、商品的基本信息
     * 2、当前商品sku的基本信息
     * 3、商品轮播图信息
     * 4、商品详情（详细为图片列表）
     * 5、商品规格信息
     * 6、当前商品sku的规格属性
     * @param skuId 商品skuId
     * @return
     */
    @Operation(summary = "商品详情")
    @GetMapping("item/{skuId}")
    public Result item(@Parameter(name = "skuId", description = "商品skuId", required = true) @PathVariable Long skuId){
        //自定义方法：查询商品详情
        ProductItemVo productItemVo = productService.item(skuId);
        return Result.build(productItemVo,ResultCodeEnum.SUCCESS);
    }

    /**
     * 远程调用：根据skuId返回sku信息
     * 思路：在service-product微服务中提供一个远程调用接口，根据skuId查询ProductSku数据
     *
     * @param skuId
     * @return
     */
    @GetMapping("/getBySkuId/{skuId}")
    public ProductSku getBySkuId(@PathVariable Long skuId){
        //自定义方法：根据skuId返回sku信息
       ProductSku productSku  = productService.getBySkuId(skuId);
        return productSku;
    }

//    @Operation(summary = "更新商品sku销量")
//    @PostMapping("updateSkuSaleNum")
//    public Boolean updateSkuSaleNum(@RequestBody List<SkuSaleDto> skuSaleDtoList) {
//        return productService.updateSkuSaleNum(skuSaleDtoList);
//    }
}
